using System;
using System.Collections.Generic;
using System.Text;

namespace Yorrick.FlickrMetadataSynchr.Sync
{
    /// <summary>
    /// Structure for settings for the metadata sync strategy.
    /// </summary>
    internal struct SyncStrategySettings
    {
        #region Private fields
        /// <summary>
        /// The desired behavior for synching tags.
        /// </summary>
        private TagsSyncBehavior _tagsSyncBehavior;

        /// <summary>
        /// The desired behavior for the case comparison of tags.
        /// </summary>
        private TagsCaseBehavior _tagsCaseBehavior;

        /// <summary>
        /// The desired behavior for sorting tags.
        /// </summary>
        private TagsSortBehavior _tagsSortBehavior;

        /// <summary>
        /// The desired behavior for synching author information.
        /// </summary>
        private AuthorSyncBehavior _authorSyncBehavior;
        #endregion

        #region Constructor
        /// <summary>
        /// Constructs an instance.
        /// </summary>
        /// <param name="tagsSyncBehavior">The desired behavior for synching tags.</param>
        /// <param name="tagsCaseBehavior">The desired behavior for the case comparison of tags.</param>
        /// <param name="tagsSortBehavior">The desired behavior for sorting tags.</param>
        /// <param name="authorSyncBehavior">The desired behavior for synching author information.</param>
        public SyncStrategySettings(
            TagsSyncBehavior tagsSyncBehavior, 
            TagsCaseBehavior tagsCaseBehavior, 
            TagsSortBehavior tagsSortBehavior,
            AuthorSyncBehavior authorSyncBehavior)
        {
            _tagsSyncBehavior = tagsSyncBehavior;
            _tagsCaseBehavior = tagsCaseBehavior;
            _tagsSortBehavior = tagsSortBehavior;
            _authorSyncBehavior = authorSyncBehavior;
        }
        #endregion

        #region Public properties
        /// <summary>
        /// Gets the desired behavior for synching tags.
        /// </summary>
        public TagsSyncBehavior TagsSyncBehavior
        {
            get
            {
                return _tagsSyncBehavior;
            }
        }

        /// <summary>
        /// Gets the desired behavior for the case comparison of tags.
        /// </summary>
        public TagsCaseBehavior TagsCaseBehavior
        {
            get
            {
                return _tagsCaseBehavior;
            }
        }

        /// <summary>
        /// Gets the desired behavior for the sorting of tags.
        /// </summary>
        public TagsSortBehavior TagsSortBehavior
        {
            get
            {
                return _tagsSortBehavior;
            }
        }

        /// <summary>
        /// Gets the desired behavior for synching author information.
        /// </summary>
        public AuthorSyncBehavior AuthorSyncBehavior
        {
            get
            {
                return _authorSyncBehavior;
            }
        }
        #endregion
    }
}
